package com.example.stream;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

public class SkipDemo {
    public static void main(String[] args) {
        List<Student> studentList = new ArrayList<>();
        studentList.add(new Student(1,"张三", 18, "M"));
        studentList.add(new Student(2,"张三1", 78, "f"));
        studentList.add(new Student(3,"张三2", 38, "M"));
        studentList.add(new Student(4,"张三3", 28, "f"));
        studentList.add(new Student(5,"张三4", 48, "M"));
        List<Student> collect = studentList.stream()
                .filter(s->s.getAge() !=28)//获取 年龄不等于28 岁的
                .limit(5)//先获取三条
                .skip(1)//再跳过1条
                .collect(Collectors.toList()); 
        //结果就只有2条 ，先跳过，再获取条数 就不会少
        System.out.println(collect);

        //提取name 信息转换成新的集合  只能基于几个 资源进行抓换map
        List<String> collect1 = studentList.stream().map(Student::getName).collect(Collectors.toList());
        System.out.println(collect1);

        //list 集合 转换类型 并且求和
        List<String> numberList = Arrays.asList("1","3","5");
        int sum = numberList.stream().mapToInt(s -> Integer.parseInt(s)).sum();
        System.out.println(sum);


        //anyMatch 至少匹配一个才会向下走
        //AllMatch 全部匹配
        if( studentList.stream().anyMatch(student -> student.getAge()>48)){
            //有一个年龄大于48 才会进来
            System.out.println("我进来了 anyMatch 48");
        }
        if( studentList.stream().allMatch(student -> student.getAge() >50)){
            //年龄都大于10
            System.out.println("我进来了， 年龄大于10");
        }else{
            System.out.println("我进来了， 不是所有年龄大于50");
        }


        for (int i = 0; i < 100; i++) {
            //findAyn 随机获取一个值 stream 串行流 获取的都一样
            //findFirst 一直返回第一个
//            Optional<Student> any = studentList.stream().filter(s -> s.getAge() > 18).findAny();
            //parallelStream 并行流处理数据  这样会返回不一样的
            Optional<Student> any = studentList.parallelStream().filter(s -> s.getAge() > 18).findAny();
            if(any.isPresent()){//如果有值
                Student student = any.get();
                System.out.println(student);
            }
        }

        //将所有数据转换成int 然后累加
//        0 表示初始值
        Integer reduce = numberList.stream().map(Integer::parseInt).reduce(0, (a, b) -> a + b);
        //等同于
        Integer reduce1 = numberList.stream().map(Integer::parseInt).reduce(0, Integer::sum);
        System.out.println(reduce);
        System.out.println(reduce1);

        //如果 numberList 不是String  则可以去掉 map 转换为 parseInt
        Optional<Integer> reduce2 = numberList.stream().map(Integer::parseInt).reduce(Integer::sum);
        System.out.println(reduce2.get());

        //获取最大值
        Optional<Integer> reduce3 = numberList.stream().map(Integer::parseInt).reduce(Integer::max);
        if(reduce3.isPresent()){
            System.out.println("最大值："+reduce3.get());
        }
        //简写
        numberList.stream().map(Integer::parseInt).max(Integer::compareTo);
        //最小值同最大值
    }

}
